/*
 * Copyright 北京航空航天大学  @ 2015 版权所有
 */
package com.buaa.edu.leetcode.algorithm.string;

import org.junit.Test;

/**
 * <p>字符串向数字的转化</p>
 * @author towan
 * @email tongwenzide@163.com
 * @time 2015年6月14日
 */
public class StringToInteger {
    //特殊字符的处理
    public int myAtoi(String str) {
        if(null==str || str.length()==0){
            return 0;
        }
        boolean isNeg = false;
        str = str.trim();
        //获取整数符号
        int p = 0;
        if(str.charAt(p)=='-'){
            isNeg = true;
            p++;
        }else if(str.charAt(p)=='+'){
            isNeg = false;
            p++;
        }
        //将字符串转化为整数
        int num = 0;
        char c ;
        while(p<str.length()){
            c = str.charAt(p);
            //忽略特殊字符
            if(c<'0' || c>'9'){
                break;
            }
            //判断溢出 FIX，比较麻烦
            if((num==214748364 && (c-'0')>7) || (num>214748364)){
                return (!isNeg)?Integer.MAX_VALUE:Integer.MIN_VALUE;
            }
            //当还未超出时，需要判断
            num = 10*num+(c-'0');
            ++p;
        }
        return (!isNeg)?num:-num;
    }
    //ERROR
    public int myAtoi2(String str) {
        int result = 0;
        try{
            result = Integer.valueOf(str);
            //Line 3: java.lang.NumberFormatException: For input string: "" 
        }catch(NumberFormatException e){
            
        }
        return result;
    }
    @Test
    public void testNull(){
        System.out.println(myAtoi(""));
        System.out.println(myAtoi2(""));
    }
    @Test
    public void test2(){
        System.out.println(myAtoi(" 010"));
        System.out.println(myAtoi2(" 010"));
    }
    @Test
    public void test3(){
        //2147483647
        System.out.println(Integer.MAX_VALUE);
        //-2147483648
        System.out.println(Integer.MIN_VALUE);
        System.out.println(myAtoi("2147483648"));
        System.out.println(myAtoi("214748368"));
//        assertEquals(2147483647,myAtoi("2147483648"));
    }
}
